package inits

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"log"
	"user_srv/basic/config"
	"user_srv/handler/models"
)

func InitMysql() {
	var err error
	cfg := config.AppCong.Mysql
	// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		cfg.User, cfg.Password, cfg.Host, cfg.Port, cfg.Database)
	config.DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger: logger.Default.LogMode(logger.Info),
	})

	if err != nil {
		panic(err)
	}
	log.Println("mysql inits success")
	err = config.DB.AutoMigrate(&models.Withdrawal{})
	if err != nil {
		panic(err)
	}
	log.Println("mysql init success")
	//// 自动迁移兴趣相关表
	//if err := models.AutoMigrateInterest(); err != nil {
	//	log.Println("auto migrate interest error:", err)
	//}
	//
	//// 初始化十个兴趣种子数据（如果不存在）
	//seedInterests := []string{"音乐", "电影", "旅行", "美食", "运动", "阅读", "摄影", "游戏", "科技", "宠物"}
	//for i, name := range seedInterests {
	//	var count int64
	//	if err := config.DB.Model(&models.Interest{}).Where("name = ?", name).Count(&count).Error; err == nil && count == 0 {
	//		_ = config.DB.Create(&models.Interest{Name: name, Sort: int32(i)}).Error
	//	}
	//}

	//
	//// 执行数据库迁移
	//err = config.DB.AutoMigrate(
	//	&models.User{},                    // 用户表
	//	&models.Interest{},                // 兴趣标签表
	//	&models.UserInterest{},            // 用户兴趣关联表
	//	&models.SwipeCandidate{},         // 滑动候选用户表
	//	&models.SwipeRecord{},            // 滑动记录表
	//	&models.MatchRecord{},            // 匹配记录表
	//	&models.ChatMessage{},            // 聊天消息表
	//	&models.LocationHistory{},        // 位置历史记录表
	//	&models.GeoFence{},              // 地理围栏表
	//	&models.LocationStats{},         // 位置统计表
	//	&models.LocationEvent{},         // 位置事件表
	//	// 灵魂匹配相关表
	//	&models.SoulQuestion{},           // 灵魂测试题目表
	//	&models.SoulQuestionCategory{},   // 题目分类表
	//	&models.SoulAnswer{},            // 用户答题记录表
	//	&models.SoulTestResult{},        // 用户测试结果表
	//	&models.SoulMatchRecord{},       // 灵魂匹配记录表
	//	&models.SoulPersonalityDimension{}, // 性格维度表
	//	&models.SoulUserDimensionScore{}, // 用户维度分数表
	//)
	//if err != nil {
	//	log.Println("auto migrate error:", err)
	//	panic(err)
	//}
	//log.Println("✅ 数据库表迁移成功！")
	//
	//// 初始化基础数据
	//initSeedData()

	log.Println("🎉 数据库初始化完成！")
}

// initSeedData 初始化种子数据
//func initSeedData() {
//	log.Println("开始初始化种子数据...")
//
//	// 初始化兴趣标签
//	seedInterests := []string{"音乐", "电影", "旅行", "美食", "运动", "阅读", "摄影", "游戏", "科技", "宠物", "健身", "咖啡", "购物", "学习", "工作"}
//	for i, name := range seedInterests {
//		var count int64
//		if err := config.DB.Model(&models.Interest{}).Where("name = ?", name).Count(&count).Error; err == nil && count == 0 {
//			interest := models.Interest{Name: name, Sort: int32(i + 1)}
//			if err := config.DB.Create(&interest).Error; err == nil {
//				log.Printf("✅ 创建兴趣标签: %s\n", name)
//			}
//		}
//	}
//
//	// 初始化性格维度
//	initPersonalityDimensions()
//
//	// 初始化题目分类
//	initQuestionCategories()
//
//	log.Println("✅ 种子数据初始化完成！")
//}
//
//// initPersonalityDimensions 初始化性格维度
//func initPersonalityDimensions() {
//	dimensions := []struct {
//		name        string
//		code        string
//		description string
//		weight      float64
//		sortOrder   int
//	}{
//		{"外向性", "EXTROVERSION", "倾向于从外部世界获得能量，喜欢社交和互动", 1.00, 1},
//		{"内向性", "INTROVERSION", "倾向于从内心世界获得能量，喜欢独处和思考", 1.00, 2},
//		{"感觉型", "SENSING", "关注具体事实和细节，重视实际经验", 1.00, 3},
//		{"直觉型", "INTUITION", "关注可能性和模式，重视创新和想象", 1.00, 4},
//		{"思考型", "THINKING", "基于逻辑和客观分析做决定", 1.00, 5},
//		{"情感型", "FEELING", "基于价值观和他人感受做决定", 1.00, 6},
//		{"判断型", "JUDGING", "喜欢有序、计划和控制", 1.00, 7},
//		{"感知型", "PERCEIVING", "喜欢灵活、开放和适应", 1.00, 8},
//	}
//
//	for _, dim := range dimensions {
//		var count int64
//		if err := config.DB.Model(&models.SoulPersonalityDimension{}).Where("dimension_code = ?", dim.code).Count(&count).Error; err == nil && count == 0 {
//			dimension := models.SoulPersonalityDimension{
//				DimensionName: dim.name,
//				DimensionCode: dim.code,
//				Description:   dim.description,
//				Weight:        dim.weight,
//				SortOrder:     dim.sortOrder,
//				IsActive:      1,
//			}
//			if err := config.DB.Create(&dimension).Error; err == nil {
//				log.Printf("✅ 创建性格维度: %s\n", dim.name)
//			}
//		}
//	}
//}

//// initQuestionCategories 初始化题目分类
//func initQuestionCategories() {
//	categories := []struct {
//		name        string
//		description string
//		weight      float64
//		sortOrder   int
//	}{
//		{"性格特征", "关于个人性格特征的测试题目", 1.00, 1},
//		{"价值观", "关于价值观和生活理念的测试题目", 1.00, 2},
//		{"生活方式", "关于生活习惯和生活方式的测试题目", 1.00, 3},
//		{"兴趣爱好", "关于兴趣爱好和娱乐偏好的测试题目", 1.00, 4},
//		{"人际关系", "关于人际交往和社交偏好的测试题目", 1.00, 5},
//		{"情感表达", "关于情感表达和沟通方式的测试题目", 1.00, 6},
//	}
//
//	for _, cat := range categories {
//		var count int64
//		if err := config.DB.Model(&models.SoulQuestionCategory{}).Where("name = ?", cat.name).Count(&count).Error; err == nil && count == 0 {
//			category := models.SoulQuestionCategory{
//				Name:        cat.name,
//				Description: cat.description,
//				Weight:      cat.weight,
//				SortOrder:   cat.sortOrder,
//				IsActive:    1,
//			}
//			if err := config.DB.Create(&category).Error; err == nil {
//				log.Printf("✅ 创建题目分类: %s\n", cat.name)
//			}
//		}
//	}
